package 关于重写Object类的equals方法相关问题;

import java.util.Objects;

public class Student_1 {
    private int id;
    private String name;
    private int age;
    private String score;

    public Student_1() {
    }

    public Student_1(int id, String name, int age, String score) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.score = score;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getScore() {
        return score;
    }

    public void setScore(String score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student_1{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", score='" + score + '\'' +
                '}';
    }

    /* -------------------------------------------------------------------------------------*/
    /**
     * 不接受子类作为参数的equals方法,没有非空字段
     * @param o
     * @return
     */

    @Override
    public boolean equals(Object o) {
        //如果两个对象地址相同，则对象肯定相等
        if (this == o) return true;
        //若比较的对象o为空，或者调用者与比较对象的字节码文件不相同，则两个对象肯定不相等
        /**
         * 注意：
         *      1.同一个类的不同实例对象，通过调用getClass()方法，返回的字节码文件都是相同的。
         *      2.字节码文件不同，表示这两个对象不是同一个类
         *      3.字节码文件相同，表示这两个对象都是某个类的实例对象（这两个对象未必相等）
         */
        if (o == null || getClass() != o.getClass()) return false;
        //将Object类型转换为Student_1类型
        Student_1 student_1 = (Student_1) o;
        //若两个对象的属性值都相同，则表示两个对象相等
        /**
         * Objects.equals(Object obj,Object obj):
         *      作用:比较任意两个对象是否相等，不是依据内存地址。而是两个对象的属性值是否相等
         */
        return id == student_1.id && age == student_1.age && Objects.equals(name, student_1.name) && Objects.equals(score, student_1.score);
    }


}
